*************************************************************************  アウトラン 解析の足跡 Ver 04/28 2005 Written by Enri ************************************************************************* ------------ ROMの内容 ------------ 000000-003FFFH :Bank #00 ;00000H-03FFFH 004000-007FFFH :Bank #01 ;04000H-07FFFH 008000-00BFFFH :Bank #02 ;08000H-0BFFFH 00C000-00FFFFH :Bank #03 ;08000H-0BFFFH 010000-013FFFH :Bank #04 014000-017FFFH :Bank #05 018000-01BFFFH :Bank #06 01C000-01FFFFH :Bank #07 020000-023FFFH :Bank #08 024000-027FFFH :Bank #09 028000-02BFFFH :Bank #10 02C000-02FFFFH :Bank #11 030000-033FFFH :Bank #12 034000-037FFFH :Bank #13 038000-03BFFFH :Bank #14 03C000-03FFFFH :Bank #15 00008H:Set VRAM Address DE=VRAM Address 00010H-00037H:Table Jump MainTask 00038H:V-Sync (INT) 00042H:Screen Off 00049H:Screen On 00056H:Set VSyncTask#nn A=VSyncTask#nn 00066H:PAUSE (NMI) 00084H:ハードの初期化 0006FH:Check FM Unit Out:0C200H=FM Unit無し=000H,有り=001H 0015AH:Table Jump A=Task#nn HL=Table 00165H;PAUSE 001B5H:VsyncTask#nn End 0082AH:Check Machine ID 0084EH:Check TV type Out:C10A 000H=PLA,0FFH=NTSC 0088AH;パッドの内容を読む 0089EH:パドルの内容を読む 008F0H:??? パドルの内容を読む(海外用) 0092FH:CLS 0091BH:VRAMへのブロック転送 HL=Data Address,DE=VRAM Address,BC=Length 00938H:VRAM Fill 009CDH:VDP 初期化 00EEDH:VayncTask#01:'SEGA MARKIII'でカラーを変える 013E5H:Check Level Command 014F2H-014F5H:隠しコマンド用データ 上下左右 014F6H-014FAH:隠しコマンド用データ 右左下上 03DA3H:スプライト属性の設定 IN:0C600H-0C6FFH 03DB8H:OUTI*040H*2 03E36H:OUTI*040H 0401BH:ゲーム画面の上2列(パネル)を描く 05C80H:BGM Clear ;------------------------------------------------------------------------ 0C000H:Sound No 0C002H:FM Unit:000H=無し 001H=有り 0C100H:VDP R#00の内容 0C101H:VDP R#01の内容 0C102H:MainTask#nn 0C104H:1P KEY Bit5:Button 2 Bit4:Button 1 Bit3:Right Bit2:Left Bit1:Down Bit0:Up 0C105H:1回だけ押した1P KEY 0C107H:PAD Flag:000H=PAD 0FFH=PADLE 0C108H:VSyncTask#nn 0C109H:Machine Id 000H=国内 0FFH=海外 0C10AH:TV type 000H=PAL 0FFH=NTSC 0C10BH:Soft Reset 0C10EH-0C10FH:カウンタ 0C110H:VDPに書き込むデータ 0C112H:PUASE Flag:000H=Off,0FFH=On 0C113H:'SEGA MARKIII'用 カラー カウンタ(000H-008H) 0C114H:'SEGA MARKIII'用 表示カウンタ(000H-008H) 0C14AH-0C14BH:Speed 0C191H:VDR R#10のデータ 0C192H-0C1A1H:???路面の状態 0C1B3H:VDR R#08のデータ 0C1BAH:タコメーター 0C1C0H:Gear 000H=Low 001H=High 0C1C3H:??? アクセル 0C1C5H:ブレーキ 000H=Off 0FFH=On 0C1D3H-0C1D4H:発進時のスピード 0C1F6H:Round 0C200H:??? Roundによって変わる 0C232H:ネーミングで何文字入れたか 0C236H:ネーミングで何を打ったか 0C237H-0C238H:ネーミング ポインタ 0C246H:My Carの傾斜 004Hが水平、値が小さくなると下、大きくなると上 0C251H:??? Flag 000H=GAME,DEMO 0FFH=Game Over,Title 0C262H:??? VSync Task実行フラグ 000H=Jump VSyncTask#01 Other=VSyncTask#nn 0C264H:隠しコマンド用データアドレス 0C266H;??? 隠しコマンド用フラグ 000H=Off 0FFH=BGM TEST OK 001H=BGM TEST中 0C267H;??? 隠しコマンド用フラグ 000H=Off 0FFH=On 0C300H:Table Jump#nn ただし000Hなら実行しない 0C320H:Table Jump#nn ただし000Hなら実行しない 0C340H:Table Jump#nn ただし000Hなら実行しない 0C600H-C63FH:スプライト属性テーブル #nのY座標 0C640H-C6FEH:スプライト属性テーブル #nのX座標、インデックス 0DE01H:TIME 0DE02H:TIME 下位 0DE03H:LAP 下位 (Dec) 0DE04H:LAP 上位(Inc) 0DE20H-0DE24H:SCORE 0DE27H:GAME Level 000H=Normal 001H=Easy 002H=Hard 0DE2BH:DEMO Flag 000H=Game 0FFH=DEMO 0DE2DH:MUSIC Select中のMusic No 0DE3DH:DEMO用のRound 0DE80H-0DE91H:VSync割り込み用プログラム 0DF00H-0DF1FH:TOP 0DF20H-0DF3FH:2 0DF40H-0DF5FH:3 0DF60H-0DF7FH:4 0DF80H-0DF9FH:5 0DFA0H-0DFBFH:6 0DFC0H-0DFDFH:7 ;------------------------------------------------------------------------ ;//////////////// ;/ Command Data / ;//////////////// T14F2: DB 001H,002H,004H,008H ;U,D,L,R T14F6: DB 008H,004H,002H,001H,0FFH ;R,L,D,U 001H:UP 002H:Down 004H:Left 008H:Right 0FFH=End Mark BGMセレクトで参照する隠しコマンドのデータ T14F6Hから0FFHまでのコマンドが入ったら0C266Hを0FFHにしてBGMテスト可能を知らせる。 0C266Hを参照してBGMテストを行い、0C266Hを001Hにする 0C266Hが001HならT14F2から0FFHまでのコマンドのチェック 以降の事が行われれば0C267Hを0FFHにする。 0C267Hが0FFHで上を押しながらボタンを押せば、イージレベル(海外用) 0C267Hが0FFHで下を押しながらボタンを押せば、ハードレベル 0C267Hが0FFHで上または下を押さないでボタンを押せば、ノーマルレベル(日本用) BGMテストのコマンド 右左下上 レベルセレクトのコマンド 上下左右右左下上の後上記の様に選んでスタート 今の所、BGMセレクト内でコレ以外のコマンド参照はしていません。 ;************************************************************************ ;* Time Table * ;* * ;************************************************************************ T5332: ;//////////////////////////////////// ;/ 000:Normal Level (Japanese Hard) / ;//////////////////////////////////// DB 075H,03FH,062H,02FH,065H,02FH,060H,01FH DB 060H,01FH,055H,01FH,065H,00FH,060H,00FH DB 062H,00FH,065H,00FH,056H,000H,056H,000H DB 056H,000H,056H,000H,056H,000H DB 000H,000H ;//////////////////////////////////// ;/ 001:Easy Level (US/Eropean Hard) / ;//////////////////////////////////// DB 080H,04FH,065H,03FH,062H,03FH,057H,02FH DB 062H,02FH0,60H0,2FH,066H,01FH,063H,01FH DB 061H,01FH,065H,01FH,058H,00FH,055H,00FH DB 056H,00FH,058H,00FH,056H,00FH DB 000H,000H ;////////////////// ;/ 002:Hard Level / ;////////////////// DB 070H,01FH,065H,00FH,062H,00FH,057H,007H DB 060H,007H,058H,007H,062H,003H,060H,003H DB 058H,003H,063H,003H,054H,000H,054H,000H DB 054H,000H,054H,000H,056H,000H レベルセレクトによって各ラウンドのチェックポイントで足されるタイムテーブルです。 ;------------------------------------------------------------------------ ;************************************************************************ ;* Table Jump Main Data * ;* * ;************************************************************************ T0010: DW A0E78 ;#00 Initialize DW A0E61 ;#01 'SEGA MARK III' DW A1080 ;#02 Set Title DW A1023 ;#03 Title DW A1238 ;#04 Set DEMO DW A1205 ;#05 'DEMO' DW A1419 ;#06 Set BGM Select DW A1327 ;#07 BGM Select DW A1540 ;#08 Set Game Start DW A150D ;#09 Game Start DW A176A ;#10 Set Game Main DW A1701 ;#11 Game Main DW A18F5 ;#12 Set Game Over DW A18D0 ;#13 Game Over DW A1920 ;#14 Set Course Map DW A1905 ;#15 Course Map DW A1B81 ;#16 Set BEST OUTRUNNERS DW A1A6B ;#17 BEST OUTRUNNERS DW A1E29 ;#18 Set Ending DW A1E0E ;#19 Ending ゲームプログラムはハードの初期化した後、割りこみを許可して 014BH-0159Hの中でループしています。 ループは0C102HでMainTask#nnを指定、0010Hから0037Hのテーブル データを参照して 各ルーチンにジャンプします。 その各ルーチンで次のジャンプするMainTask#nnを設定されループに戻り、 設定されたMainTask#nnにジャンプの無限ループです。 ;************************************************************************ ;* V-Sinc Task Table * ;* * ;************************************************************************ T01D0: DW A031C ;#00 DW A01F0 ;#01 Color Efect in 'SEGA MARKIII' DW A0208 ;#02 DW A01F0 ;#03 DW A0249 ;#04 VDP#08=00,Set Sprite,Read PAD,Dec Counter DW A02EA ;#05 DW A036C ;#06 DW A03B2 ;#07 DW A03ED ;#08 DW A044A ;#09 DW A026D ;#10 DW A02AC ;#11 Set Sprite,Read PAD,Go to VSyncTasck#13 DW A02AC ;#12 Set Sprite,Read PAD,Go to VSyncTasck#13 DW A02B3 ;#13 DW A02C5 ;#14 VDP R#08=00,Set Sprite,Dec Counter DW A01C7 ;#15 Screen On,Set Sprite ;************************************************************************ ;* Table Jump Data * ;* * ;************************************************************************ T25DF: DW A2B21 DW A2B53 DW A2CDD DW A2CF0 DW A344B DW A344B DW A344B DW A3496 DW A34E1 DW A350F DW A353D DW A354E DW A3636 DW A3636 DW A37C3 DW A3817 DW A386A DW A38B6 DW A2D33 DW A2D70 DW A2DED DW A2ECA DW A2EF3 DW A36FA DW A3723 DW A198D DW A19E9 DW A35B2 DW A35CE DW A35D5 DW A206B DW A2081 DW A20D7 DW A20E2 DW A2109 DW A2118 DW A213C DW A214C DW A21A5 DW A21BB DW A2213 DW A2223 DW A2226 DW A2233 DW A2253 DW A2298 DW A22A7 DW A230A DW A231F DW A23B9 DW A244F DW A245E DW A2539 DW A255C DW A3781 DW A3790